Образы CP/M дискет KDI
__TOC__ Формат KDI KDI - Korvet Disk Image (дефакто это 5*1024*80*2) его описание находится в 0м секторе (всякие там смещения) и там же есть CRC, его легко задетектить. Содержимое первых 32 байт информационного сектора приведено на рис. 5.5.1. Первые 6 байт - информация для загрузчика. Если они равны нулю, значит диск не содержит информацию для загрузки, т.е. диск не системный. Байты 7...16 содержат информацию о физическом устройстве диска. Их назначение понятно из рис.5.5.1. Байты 17...31 содержат информацию о логическом устройстве диска. Хотя некоторые из приведенных логических параметров могли бы быть вычислены, для простоты весь блок логических параметров приведен в том виде, каком CP/M требует таблицу дисковых параметров. Подробнее эта таблица будет расписана ниже. Байт 32 содержит контрольную сумму со смещением 66H (т.е. КС1-31 + 66H = байта 32. В заключение этого пункта отметим, что существует стандартный формат диска в CP/M. Параметры стандартного диска следующие: 8", одинарная плотность, одна сторона, 77 дорожек, 26 128-ми байтовых секторов на дорожке, две системных дорожки, 64 входа в директорию, фактор смещения - 6. Этот стандарт распространяется только на диски 8". Для дисков 5.25" такого стандарта нет. Номер байта: обозначение ; комментарий ;физические параметры диска 1: DW LoadAdress ; адрес, с которого начинается загрузка 3: DW RunAdress ; адрес,куда передается управление после ; загрузки 5: DW Count ; число загружаемых физических секторов 7: DB SizeDisk ; если значение байта 1 -8" диск, если 0 ; - 5.25" 8: DB Density ; способ записи: 0 - FM; 1 - MFM 9: DB TpI ; число дорожек на дюйм: 0 - 48 TpI ; 1 - 96 TpI, 2 - 135 TpI 10: DB SkewFactor ; если значение байта 1 - фактора смещения ; нет. Если <> 1 - байты 33-128 ; информационного сектора содержат таблицу ; перевода секторов, причем значение байта ; равно размеру таблицы. 11: DB SecSize ; размер физического сектора:0 - 128 байт, ; 1 - 256 байт, 2 - 512 байт и 3 - 1024 12: DB InSide ; информация о сторонах диска: 0 - ; односторонний диск, 1 - двухсторонний, ; причем сектора нумеруются от 1 до n ; с каждой стороны, четные логические ; дорожки с нулевой стороны, нечетные с ; первой. 13: DW SecPerTrack; число физических секторов на дорожке 15: DW TrkPerDisk ; число дорожек на диске (с одной стороны) ;логические параметры диска 17: DW SPT ; число логических секторов на дорожке 19: DB BSH ; фактор сдвига блока распределения данных 20: DB BLM ; маска блока распределения данных 21: DB EXM ; маска размера 22: DW DSM ; объем памяти на диске в блоках минус 1 24: DW DRM ; число входов в директорию диска минус 1 26: DB AL0 ; определяет, какие блоки зарезервированы 27: DB AL1 ; под директорию 28: DW CKS ; размер вектора контроля директории 30: DW OFS ; число системных дорожек на диске 32: DB CheckSum ;контрольная сумма служебной информации CS1-31+66H РИС. 5.5.1. CP/M Раздел может быть до сотни мегабайт в реализации на Орионе (а максимальное теоретическое ограничение CP/M на файловую систему - 65356*16384=1073741824 байт, т.е. 1Гбайт). CP/M 2.2 disc formats http://www.classiccmp.org/cpmarchives/cpm/mirrors/www.seasip.info/Cpm/format22.html CP/M 2.2 works with a much larger range of discs than CP/M 1.4. The disc statistics are stored in a parameter block (the DPB), which contains the following information: DEFW spt ;Number of 128-byte records per track DEFB bsh ;Block shift. 3 => 1k, 4 => 2k, 5 => 4k.... DEFB blm ;Block mask. 7 => 1k, 0Fh => 2k, 1Fh => 4k... DEFB exm ;Extent mask, see later DEFW dsm ;(no. of blocks on the disc)-1 DEFW drm ;(no. of directory entries)-1 DEFB al0 ;Directory allocation bitmap, first byte DEFB al1 ;Directory allocation bitmap, second byte DEFW cks ;Checksum vector size, 0 for a fixed disc ;No. directory entries/4, rounded up. DEFW off ;Offset, number of reserved tracks The directory allocation bitmap is interpreted as: al0 al1 b7b6b5b4b3b2b1b0 b7b6b5b4b3b2b1b0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 - ie, in this example, the first 4 blocks of the disc contain the directory. The DPB is not stored on disc. It is either hardwired into the BIOS or generated on the fly when a disc is logged in. The reserved tracks will contain an image of CP/M 2.2, used when the system is rebooted. Discs can be formatted as data only discs, in which case they have no system tracks and cannot be used to reboot the system. CP/M 2.2 directory The CP/M 2.2 directory has only one type of entry: UU F1 F2 F3 F4 F5 F6 F7 F8 T1 T2 T3 EX S1 S2 RC .FILENAMETYP.... AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL ................ UU = User number. 0-15 (on some systems, 0-31). The user number allows multiple files of the same name to coexist on the disc. User number = 0E5h => File deleted Fn - filename Tn - filetype. The characters used for these are 7-bit ASCII. The top bit of T1 (often referred to as T1') is set if the file is read-only. T2' is set if the file is a system file (this corresponds to "hidden" on other systems). EX = Extent counter, low byte - takes values from 0-31 S2 = Extent counter, high byte. An extent is the portion of a file controlled by one directory entry. If a file takes up more blocks than can be listed in one directory entry, it is given multiple entries, distinguished by their EX and S2 bytes. The formula is: Entry number = ((32*S2)+EX) / (exm+1) where exm is the extent mask value from the Disc Parameter Block. S1 - reserved, set to 0. RC - Number of records (1 record=128 bytes) used in this extent, low byte. The total number of records used in this extent is (EX & exm) * 128 + RC If RC is 80h, this extent is full and there may be another one on the disc. File lengths are only saved to the nearest 128 bytes. AL - Allocation. Each AL is the number of a block on the disc. If an AL number is zero, that section of the file has no storage allocated to it (ie it does not exist). For example, a 3k file might have allocation 5,6,8,0,0.... - the first 1k is in block 5, the second in block 6, the third in block 8. AL numbers can either be 8-bit (if there are fewer than 256 blocks on the disc) or 16-bit (stored low byte first). Date stamps Some compatible 3rd-party BDOSes (such as Z80DOS and DOS+) implement date stamping. Unfortunately the date stamp format they use is different from that used by CP/M 3. Every fourth entry of a date-stamped directory will contain stamps for the preceding three entries: 21 00 C1 C1 M1 M1 M1 M1 A1 A1 A1 A1 C2 C2 M2 M2 !............... M2 M2 A2 A2 A2 A2 C3 C3 M3 M3 M3 M3 A3 A3 A3 A3 ................ C1 = File 1 Create date M1 = File 1 Modify date/time A1 = File 1 Access date/time C2 = File 2 Create date M2 = File 2 Modify date/time A2 = File 2 Access date/time C3 = File 3 Create date M3 = File 3 Modify date/time A3 = File 3 Access date/time The format of a date/time entry is: DW day ;Julian day number, stored low byte first. ;Day 1 = 1 Jan 1978. DB hour ;BCD hour, eg 13h => 13:xx DB min ;BCD minute KDI Checksum Reader v1.4 * http://zx-pk.ru/threads/11294-prosmotr-obrazov-cp-m-diskov.html?p=829154&viewfull=1#post829154 kdichkreader filename /-l -log/-l Options: -log Save log to file; -l --lang Change interface language (--lang en --> set English language for example). -l